package cn.hyatt.auth.service;

import cn.hyatt.auth.dto.systemUser.SystemUserFindDto;
import cn.hyatt.auth.dto.systemUser.SystemUserSaveDto;
import cn.hyatt.auth.dto.systemUser.SystemUserUpdateDto;
import cn.hyatt.auth.dto.systemUser.SystemUserVo;
import cn.hyatt.auth.entity.SystemUser;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Optional;

/**
 * 系统用户-服务接口
 *
 * @author hyatt
 */
public interface SystemUserService extends IService<SystemUser> {
    /**
     * 按列表查找
     *
     * @param dto 查找条件对象
     * @return 结果
     */
    List<SystemUser> findByList(SystemUserFindDto dto);

    /**
     * 按页面查找
     *
     * @param dto 查找条件对象
     * @return 结果
     */
    IPage<SystemUser> findByPage(SystemUserFindDto dto);

    /**
     * 按用户名查找
     * @param username 用户名
     * @return 结果
     */
    Optional<SystemUser> findByUsername(String username);

    /**
     * 按Id获取缓存对象
     * @param id Id
     * @return 结果
     */
    Optional<SystemUserVo> getCacheById(Long id);

    /**
     * 按 用户名 获取缓存
     * @param username 用户名
     * @return 结果
     */
    Optional<SystemUserVo> getCacheByUsername(String username);

    /**
     * 保存缓存
     * @param vo 保存对象
     */
    void saveCache(SystemUserVo vo);

    /**
     * 保存
     *
     * @param dto 保存数据对象
     */
    void save(SystemUserSaveDto dto);

    /**
     * 更新
     *
     * @param id  ID
     * @param dto 更新数据对象
     */
    void update(Long id, SystemUserUpdateDto dto);

    /**
     * 按 Id 删除
     *
     * @param id ID
     */
    void deleteById(Long id);

    /**
     * 按 Id 删除缓存
     * @param id ID
     */
    void deleteCacheById(Long id);

    /**
     * 转 Vo 对象
     *
     * @param entity 实体对象
     * @return 结果
     */
    SystemUserVo toVo(SystemUser entity);
}
